export default {
  // 为当前模块开启命名空间
  namespaced: true,
  
  // 模块的 state 数据
   state: () => ({
     // 购物车数组，用于存储购物车中每个商品的信息对象
     cart: JSON.parse(uni.getStorageSync('cart') || '[]')
   }),
   
  // 模块的 mutations 方法
  mutations: {
    // 加入购物车
    addToCart(state, goods) {
      const result = state.cart.find(x => x.goods_id === goods.goods_id)
      if(!result) {
        // 购物车中没有该商品
        state.cart.push(goods)  
      } else {   
        // 购物车中有该商品，只需更新商品数量即可
        result.goods_count++
      }
      // 通过 commit 方法调用 m_cart 命名空间下的 saveToStorage 方法
      this.commit('m_cart/saveToStorage')
    },
    //  将购物车中的数据持久化存储到本地
    saveToStorage(state) {
      uni.setStorageSync('cart', JSON.stringify(state.cart))
    },
    // 更新购物车中商品的选中状态
    updateGoodsState(state, goods) {
      const result = state.cart.find(x => x.goods_id === goods.goods_id)
      if(result) {
        result.goods_state = goods.goods_state
        // 更新本地存储的数据
        this.commit('m_cart/saveToStorage')
      }
    },
    //  更新购物车中商品的数量
    updateGoodsMount(state, goods) {
      const result = state.cart.find(x => x.goods_id === goods.goods_id)
      if(result) {
        result.goods_count = goods.goods_count
        // 更新本地存储的数据
        this.commit('m_cart/saveToStorage')
      }
    },
    // 根据 ID 从购物车中删除对应的商品
   removeGoodsById(state, id) {
     state.cart = state.cart.filter(x => x.goods_id !== id) 
     // 更新本地存储的数据
     this.commit('m_cart/saveToStorage')
   },
   // 更新所有购物车中商品的选中状态
   updateAllGoodsState(state, newState) {
     state.cart.forEach(x => x.goods_state=newState)
     // 更新本地存储的数据
     this.commit('m_cart/saveToStorage')
   }
  },
  
  
  // 模块的 getters 属性
  getters: {
    // 统计购物车中商品的总数量
     total(state) {
      // let c = 0
      // // 循环统计商品的数量，累加到 c 中
      // state.cart.forEach(goods => c += goods.goods_count)
      // return c
      
      // total 表示总数，0 是 total 的初始值，item 是数组中的循环项
      return state.cart.reduce((total, item) => total += item.goods_count, 0)
    },
    //  已勾选的商品总数量
    checkedCount(state) {
      return state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count, 0)
    },
    // 统计购物车中所有已勾选的商品的总价
    checkedGoodsPrice(state) {
      return state.cart.filter(x => x.goods_state).reduce((total, item) => total += item.goods_count * item.goods_price, 0).toFixed(2)
    }
  },
  
}